package org.activiti.engine.impl.db;

import java.util.Arrays;
import java.util.List;

/**
 * This class is used for auto-upgrade purposes.
 * 
 * The idea is that instances of this class are put in a sequential order,
 * and that the current version is determined from the ACT_GE_PROPERTY table.
 * 
 * Since sometimes in the past, a version is ambiguous (eg. 5.12 => 5.12, 5.12.1, 5.12T) this class act as a wrapper
 * with a smarter matches() method.
 * 
 * @author jbarrez
 */
public class ActivitiVersion {

	protected String mainVersion;
	protected List<String> alternativeVersionStrings;
	
	public ActivitiVersion(String mainVersion) {
		this.mainVersion = mainVersion;
		this.alternativeVersionStrings = Arrays.asList(mainVersion);
	}
	
	public ActivitiVersion(String mainVersion, List<String> alternativeVersionStrings) {
		this.mainVersion = mainVersion;
		this.alternativeVersionStrings = alternativeVersionStrings;
	}
	
	public String getMainVersion() {
		return mainVersion;
	}
	
	public boolean matches(String version) {
		if (version.equals(mainVersion)) {
			return true;
		} else if (!alternativeVersionStrings.isEmpty()){
			return alternativeVersionStrings.contains(version);
		} else {
			return false;
		}
	}
	
	public boolean equals(Object obj) {
		if (!(obj instanceof ActivitiVersion)) {
			return false;
		}
		ActivitiVersion other = (ActivitiVersion) obj;
		boolean mainVersionEqual = mainVersion.equals(other.mainVersion);
		if (!mainVersionEqual) {
			return false;
		} else {
			if (alternativeVersionStrings != null) {
				return alternativeVersionStrings.equals(other.alternativeVersionStrings);
			} else {
				return other.alternativeVersionStrings == null;
			}
		}
	}

}
